// 从axios框架导入axios组件
import axios from "axios";
import {
	getTokenName,
	messageConfirm,
	messageTip,
	removeToken
} from "../util/util";
import {
	ElMessageBox
} from "element-plus";

// 定义后端接口地址的前缀
axios.defaults.baseURL = "http://localhost:8089";

export function doGet(url, params) {

	return axios({
		method: 'GET',
		url: url,
		params: params,
		dataType: 'json'
	})
}

export function doPost(url, data) {

	return axios({
		method: 'POST',
		url: url,
		data: data,
		dataType: 'json'
	})
}

export function doPut(url, data) {

   return axios({
		method: 'PUT',
		url: url,
		data: data,
		dataType: 'json'
	})
}

export function doDelete(url, params) {

   return axios({
		method: 'DELETE',
		url: url,
		params: params,
		dataType: 'json'
	})
}

// 添加请求拦截器
axios.interceptors.request.use((config) => {
	// 在发送请求之前做些什么，在请求头中放一个token(jwt)，传给后端接口
	let token = sessionStorage.getItem(getTokenName());
	// 表示tokne不存在
	if (!token) {
		token = window.localStorage.getItem(getTokenName());
	}
	
	if(token){
		config.headers['rememberMe'] = true;
	}

	// 表示token存在
	if (token) {
		config.headers['Authorization'] = token;
	}

	return config;
}, (error) => {
	// 对请求错误做些什么
	return Promise.reject(error);
});


// 添加响应拦截器
axios.interceptors.response.use((response) => {
	// 2xx 范围内的状态码都会触发该函数。
	// 对响应数据做点什么，拦截token验证的结果，进行相应的提示和页面跳转
	// 提示一下token不合法的原因

	if (response.data.code > 900) {
		// 给前端用户提示，并且跳转页面
		messageConfirm(response.data.msg + ",是否重新去登录？").then(() => {
				// 既然后端验证token未通过，那么前端的token肯定有问题，没必要存储在浏览器中，直接删除。
				removeToken();
				// 用户点击“确定”按钮就会触发then函数
				// 跳到登录页
				window.location.href = "/";
			})
			.catch(() => {
				//用户点击“取消”按钮就会触发catch函数
				messageTip("取消去登录", "warning");

			})
			
			return;
	}


	return response;
}, function(error) {
	// 超出 2xx 范围的状态码都会触发该函数。
	// 对响应错误做点什么
	return Promise.reject(error);
});